########################################################-*-mode:Makefile-*-
##                                                                       ##
##                  Language Technologies Institute                      ##
##                     Carnegie Mellon University                        ##
##                      Copyright (c) 2000-2015                          ##
##                        All Rights Reserved.                           ##
##                                                                       ##
##  Permission is hereby granted, free of charge, to use and distribute  ##
##  this software and its documentation without restriction, including   ##
##  without limitation the rights to use, copy, modify, merge, publish,  ##
##  distribute, sublicense, and/or sell copies of this work, and to      ##
##  permit persons to whom this work is furnished to do so, subject to   ##
##  the following conditions:                                            ##
##   1. The code must retain the above copyright notice, this list of    ##
##      conditions and the following disclaimer.                         ##
##   2. Any modifications must be clearly marked as such.                ##
##   3. Original authors' names are not deleted.                         ##
##   4. The authors' names are not used to endorse or promote products   ##
##      derived from this software without specific prior written        ##
##      permission.                                                      ##
##                                                                       ##
##  CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK         ##
##  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ##
##  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ##
##  SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE      ##
##  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ##
##  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ##
##  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ##
##  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ##
##  THIS SOFTWARE.                                                       ##
##                                                                       ##
###########################################################################
FLITEDIR=__FLITEDIR__
TOP=$(FLITEDIR)
DIRNAME=flite
VOICENAME=__VOICENAME__
VOICETYPE=__VOICETYPE__

FLITE_LANG=__FLITELANG__
FLITE_LEX=__FLITELEX__
LOCAL_INCLUDES = -I$(TOP)/lang/$(FLITE_LANG) -I$(TOP)/lang/$(FLITE_LEX)
LOCAL_LANGLEX_LIBS = -lflite_$(FLITE_LANG) -lflite_$(FLITE_LEX)
LOCAL_LIBS = -L . -l$(VOICENAME) 
H = 

CSRCS = $(VOICENAME).c

VOICES=$(VOICENAME)

ifeq ($(VOICETYPE),diphone)
## Diphone
CSRCS +=$(VOICENAME)_$(VOICETYPE).c
CSRCS +=$(VOICENAME)_lpc.c
CSRCS +=$(VOICENAME)_res.c
CSRCS +=$(VOICENAME)_residx.c
else
ifeq ($(VOICETYPE),cg)
## Clustergen
CSRCS += $(VOICENAME)_cg.c
CSRCS += $(VOICENAME)_cg_phonestate.c
# Identify which .c param files are used single or multi-rfs
include paramfiles.mak
CSRCS += $(shell ls $(VOICENAME)_cg_*_f0_trees.c)
CSRCS += $(shell ls $(VOICENAME)_cg_*_mcep_trees.c)
CSRCS += $(shell ls $(VOICENAME)_cg_*_params.c)
CSRCS += $(shell ls $(VOICENAME)_cg_*_durmodel.c)
ifeq ($(SPAMF0),true)
CSRCS += $(VOICENAME)_spamf0_phrase.c $(VOICENAME)_spamf0_accent.c $(VOICENAME)_spamf0_accent_params.c
endif
ifeq ($(CG_GRAPHEME),true)
CSRCS += $(VOICENAME)_phoneset.c 
EXTRA_CC_FLAGS += -DCG_GRAPHEME=1
endif
MCEPOBJS =
LPCOBJS =
else
## Clunits/ldom
CSRCS += $(VOICENAME)_clunits.c
CSRCS += $(VOICENAME)_cltrees.c $(VOICENAME)_lpc.c $(VOICENAME)_mcep.c
CSRCS += $(VOICENAME)_cl_durmodel.c
MCEPSRCS = $(shell if [ -f $(VOICENAME)_mcep_000.c ]; then ls $(VOICENAME)_mcep_*.c ; fi)
MCEPOBJS = $(MCEPSRCS:.c=.o)
LPCSRCS= $(shell if [ -f $(VOICENAME)_lpc_000.c ] ; then ls $(VOICENAME)_lpc_*.c; fi )
LPCOBJS = $(LPCSRCS:.c=.o)
RESSRCS= $(shell if [ -f $(VOICENAME)_res_000.c ] ; then ls $(VOICENAME)_res_*.c; fi )
RESOBJS = $(RESSRCS:.c=.o)
endif
endif

OBJS = $(CSRCS:.c=.o) $(LPCOBJS) $(MCEPOBJS) $(RESOBJS) 

ALL = lib$(VOICENAME).a flite_$(VOICENAME)

include $(FLITEDIR)/config/common_make_rules

LIBDIR=.
ifdef SHFLAGS
ALL += lib$(VOICENAME).so
endif

$(VOICENAME)_lpc.o: $(VOICENAME)_lpc.c
	$(CC) $(CFLAGS) -I. -I$(FLITEDIR)/include -c -o $@ $<

$(VOICENAME)_mcep.o: $(VOICENAME)_mcep.c
	$(CC) $(CFLAGS) -I. -I$(FLITEDIR)/include -c -o $@ $<

flite_$(VOICENAME): flite_main.o flite_voice_list.o flite_lang_list.o $(FLITELIBS) lib$(VOICENAME).a
	$(CC) $(CFLAGS) -o $@ flite_main.o flite_voice_list.o flite_lang_list.o $(LOCAL_LIBS)  $(LOCAL_LANGLEX_LIBS) $(FLITELIBFLAGS) $(LDFLAGS)

lib$(VOICENAME).a: $(OBJS)
	@ $(AR) cruv lib$(VOICENAME).a $(OBJS)
	@ $(RANLIB) lib$(VOICENAME).a
	@ touch .build_lib

flite_voice_list.c:
	$(TOP)/tools/make_voice_list $(VOICES)

flite_lang_list.c:
	$(TOP)/tools/make_lang_list $(FLITE_LANG) $(FLITE_LEX)

# Dump cg voice as single file
voicedump : flite_$(VOICENAME)
	./flite_$(VOICENAME) -voicedump $(VOICENAME).flitevox
# Add build date to the flitevox file
	$(FLITEDIR)/bin/flitevox_info -set build_date -val "`date`" -voice $(VOICENAME).flitevox

# Run front end tests
flitecheck:
	$(FLITEDIR)/bin/run_flitecheck $(VOICENAME).flitevox

